package com.tbit.main.dao.core;

import com.tbit.main.h2.pojo.ParkPoint;
import com.tbit.main.pojo.HeatMapStat;
import com.tbit.main.pojo.ParkPointMachineCount;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 停车点
 *
 * @author Leon
 * 2019年11月9日 下午2:29:09
 */
public interface ParkPointDao {
    /**
     * 添加
     *
     * @param parkPoint
     */
    void insert(ParkPoint parkPoint);

    /**
     * 添加
     *
     * @param parkPoints
     */
    void insertBatch(List<ParkPoint> parkPoints);

    /**
     * 更新
     *
     * @param parkPoint
     */
    void update(ParkPoint parkPoint);

    /**
     * 批量更新
     *
     * @param map
     */
    void updateBatch(List<Map<String, Object>> map);

    /**
     * 删除
     *
     * @param parkPointId
     */
    void del(Integer parkPointId);

    /**
     * 根据停车点id查询
     *
     * @param parkPointId
     * @return
     */
    ParkPoint getByParkPointId(Integer parkPointId);

    /**
     * 根据设备id查询
     *
     * @param machineId
     * @return
     */
    ParkPoint getByMachineId(Integer machineId);

    /**
     * 根据代理id查询
     *
     * @param accountId
     * @return
     */
    List<ParkPoint> getByAccountId(Integer accountId);

    /**
     * 根据分区id查询
     *
     * @param regionId
     * @return
     */
    List<ParkPoint> getByRegionId(@Param("regionId") String regionId);

    /**
     * 根据区域id和等级查询
     *
     * @param accountId 区域id
     */
    List<ParkPoint> getByAccountIdAndLevel(@Param("accountId") Integer accountId, @Param("level") Integer level);

    /**
     * 根据分区id和等级查询
     *
     * @param regionId 分区id
     */
    List<ParkPoint> getByRegionIdAndLevel(@Param("regionId") String regionId, @Param("level") Integer level);

    /**
     * 根据平台账户id查询
     *
     * @param map
     * @return
     */
    List<ParkPoint> getByAccountIds(Map<String, Object> map);

    /**
     * 根据平台账户id查询
     *
     * @param accountIds
     * @return
     */
    List<ParkPoint> getAccountIds(@Param("accountIds") String accountIds);

    /**
     * 统计个别站点投放车辆数量
     *
     * @param parkPointIds
     * @return
     */
    List<ParkPointMachineCount> groupByParkPoints(@Param("parkPointIds") String parkPointIds);

    /**
     * 统计站点投放车辆数量
     *
     * @param accountId
     * @return
     */
    List<ParkPointMachineCount> groupByParkPoint(Integer accountId);

    /**
     * 统计站点投放车辆数量
     *
     * @param regionId
     * @return
     */
    List<ParkPointMachineCount> groupByRegionId(@Param("regionId") String regionId);

    /**
     * 根据代理商和距离查询
     *
     * @param params
     * @return
     */
    List<ParkPoint> getByAccountAndArea(Map<String, Object> params);

    /**
     * 根据分区和距离查询
     *
     * @param params
     * @return
     */
    List<ParkPoint> getByRegionIdAndArea(Map<String, Object> params);

    /**
     * 借出站点
     *
     * @param params
     * @return
     */
    List<HeatMapStat> statByStartPark(Map<String, Object> params);

    /**
     * 归还站点
     *
     * @param params
     * @return
     */
    List<HeatMapStat> statByEndPark(Map<String, Object> params);

    /**
     * 获取所有站点
     *
     * @return
     */
    List<ParkPoint> getAll();

    /**
     * 已删除分区站点
     *
     * @return
     */
    List<Integer> getNotRegionId();

    /**
     * 清除已删除分区站点
     */
    void delRegionId(@Param("parkPointIds") String parkPointIds);

    /**
     * 批量获取站点
     *
     * @param parkPointIds
     * @return
     */
    List<ParkPoint> getByParkPoints(@Param("parkPointIds") String parkPointIds);

    /**
     * 获取站点
     *
     * @param params
     * @return
     */
    List<ParkPoint> getByRegionIds(Map<String, Object> params);

    void test(Map<String, Object> map);


    List<ParkPoint> getAccountIdName(Map<String, Object> params);
}